JavaScript ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๊ฐ๋ ฅํ ๊ธฐ๋ฅ์ ํ์ฉํ์ฌ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ๊ตฌํํ์ธ์. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ฐ์ํํ๊ณ ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ๋ฉฐ ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ์์ฑ์ ๊ฐ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์ธ์.
JavaScript ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ: ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ํ์
๋์์์ด ์งํํ๋ ์น ๊ฐ๋ฐ ํ๊ฒฝ์์ ๋น๋๊ธฐ ์์ ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. JavaScript ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ ์ฒ๋ฆฌ, ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๊ฐ๋ ฅํ๊ณ ์ฐ์ํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๊ฐ๋ , ์ด์ , ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ํ๊ตฌํ์ฌ ์ด ํต์ฌ ๊ธฐ์ ์ ๋ง์คํฐํ ์ ์๋๋ก ๋์๋๋ฆฝ๋๋ค.
JavaScript์ ๋น๋๊ธฐ ์์ ์ดํดํ๊ธฐ
์ ํต์ ์ธ JavaScript ์ฝ๋๋ ๋๊ธฐ์ ์ผ๋ก ์คํ๋ฉ๋๋ค. ์ฆ, ๊ฐ ์์ ์ด ์๋ฃ๋ ํ์์ผ ๋ค์ ์์ ์ด ์์๋ฉ๋๋ค. ๊ทธ๋ฌ๋ API์์ ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ, ํ์ผ ์ฝ๊ธฐ, ์ฌ์ฉ์ ์ ๋ ฅ ์ฒ๋ฆฌ์ ๊ฐ์ ๋ง์ ์ค์ ์๋๋ฆฌ์ค์๋ ๋น๋๊ธฐ ์์ ์ด ํฌํจ๋ฉ๋๋ค. ์ด๋ฌํ ์์ ์ ์๊ฐ์ด ๊ฑธ๋ฆด ์ ์์ผ๋ฉฐ, ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ํ์ํฌ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์ฝ๋์ ์คํ์ ์ฐจ๋จํ์ง ์๊ณ ์์ ์ ์์ํ ์ ์์ต๋๋ค. ์ฝ๋ฐฑ, ํ๋ก๋ฏธ์ค(Promise), Async/Await๋ ๋น๋๊ธฐ ์์ ์ ๊ด๋ฆฌํ๋ ์ผ๋ฐ์ ์ธ ๊ธฐ์ ์ ๋๋ค.
JavaScript ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ์๊ฐ
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ ์์ ์ ๊ฐ๋ ฅํจ๊ณผ ์ ๋๋ ์ดํฐ์ ๋ฐ๋ณต ๊ธฐ๋ฅ์ ๊ฒฐํฉํ ํน๋ณํ ์ ํ์ ํจ์์ ๋๋ค. ์ด๋ฅผ ํตํด ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ์ํ์ค๋ฅผ ํ ๋ฒ์ ํ๋์ฉ ์์ฑํ ์ ์์ต๋๋ค. ์๊ฒฉ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ ์์ํด ๋ณด์ธ์. ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๊ฐ ์ฒญํฌ๊ฐ ๋์ฐฉํ๋ ๋๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ์ฃผ์ ํน์ง:
- ๋น๋๊ธฐ์ฑ(Asynchronous):
async
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌawait
๋ฅผ ํตํด ๋น๋๊ธฐ ์์ ์ ์ํํ ์ ์์ต๋๋ค. - ์ ๋๋ ์ดํฐ(Generators):
yield
ํค์๋๋ฅผ ์ฌ์ฉํ์ฌ ์คํ์ ์ผ์ ์ค์งํ๊ณ ๊ฐ์ ๋ฐํํ๋ฉฐ, ๋ค์ ๊ฐ์ด ์์ฒญ๋ ๋ ์ค๋จ๋ ์ง์ ๋ถํฐ ๋ค์ ์์ํฉ๋๋ค. - ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ(Asynchronous Iterators): ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๋ฅผ ๋ฐํํ๋ฉฐ, ์ด๋
for await...of
๋ฃจํ๋ฅผ ์ฌ์ฉํ์ฌ ์๋นํ ์ ์์ต๋๋ค.
๊ตฌ๋ฌธ ๋ฐ ์ฌ์ฉ๋ฒ
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๊ตฌ๋ฌธ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
async function* asyncGeneratorFunction() {
// ๋น๋๊ธฐ ์์
yield value1;
yield value2;
// ...
}
// ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ์๋นํ๊ธฐ
async function consumeGenerator() {
for await (const value of asyncGeneratorFunction()) {
console.log(value);
}
}
consumeGenerator();
์ค๋ช :
async function*
๊ตฌ๋ฌธ์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ํจ์๋ฅผ ์ ์ํฉ๋๋ค.yield
ํค์๋๋ ํจ์์ ์คํ์ ์ผ์ ์ค์งํ๊ณ ๊ฐ์ ๋ฐํํฉ๋๋ค.for await...of
๋ฃจํ๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๊ฐ ์์ฑํ ๊ฐ๋ค์ ์ํํฉ๋๋ค.await
ํค์๋๋ ๊ฐ ๊ฐ์ด ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ์์ ํ ํด๊ฒฐ๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ์ฌ์ฉ์ ์ด์
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๋ ๋ฐ ์์ด ์๋ง์ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ์ฒ๋ฆฌํจ์ผ๋ก์จ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ด๊ณ ํนํ ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ค๋ฃฐ ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์์ฑ์ ํฅ์์ํต๋๋ค.
- ์ฝ๋ ๊ฐ๋
์ฑ ํฅ์: ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋จ์ํํ์ฌ ์ดํดํ๊ณ ์ ์ง ๊ด๋ฆฌํ๊ธฐ ์ฝ๊ฒ ๋ง๋ญ๋๋ค.
for await...of
๋ฃจํ๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋นํ๋ ๊น๋ํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํฉ๋๋ค. - ๋จ์ํ๋ ์ค๋ฅ ์ฒ๋ฆฌ: ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋๋ ์ดํฐ ํจ์ ๋ด์์ ์ค๋ฅ๋ฅผ ์ฐ์ํ๊ฒ ์ฒ๋ฆฌํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค๋ฅธ ๋ถ๋ถ์ผ๋ก ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ์ญ์(Backpressure) ๊ด๋ฆฌ: ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ณ ์๋น๋๋ ์๋๋ฅผ ์ ์ดํ์ฌ ์๋น์๊ฐ ๋น ๋ฅธ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋๋๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค. ์ด๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด๋ ๋์ญํญ์ด ์ ํ๋ ๋ฐ์ดํฐ ์์ค์ ๊ด๋ จ๋ ์๋๋ฆฌ์ค์์ ํนํ ์ค์ํฉ๋๋ค.
- ์ง์ฐ ํ๊ฐ(Lazy Evaluation): ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๊ฐ์ด ์์ฒญ๋ ๋๋ง ๊ฐ์ ์์ฑํ๋ฏ๋ก ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ์ฒ๋ฆฌํ ํ์๊ฐ ์๋ ๊ฒฝ์ฐ ์ฒ๋ฆฌ ์๊ฐ๊ณผ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ ์ ์์ต๋๋ค.
์ค์ฉ์ ์ธ ์์
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋ ์ ์๋์ง ๋ช ๊ฐ์ง ์ค์ ์์ ๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
1. API์์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐํ๊ธฐ
ํ์ด์ง๋ค์ด์ ๋ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํด ๋ณด์ธ์. ๋ชจ๋ ํ์ด์ง๊ฐ ๋ค์ด๋ก๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ , ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ํ์ด์ง๊ฐ ์ฌ์ฉ ๊ฐ๋ฅํด์ง ๋๋ง๋ค ์คํธ๋ฆฌ๋ฐํ ์ ์์ต๋๋ค.
async function* fetchPaginatedData(url) {
let page = 1;
while (true) {
const response = await fetch(`${url}?page=${page}`);
const data = await response.json();
if (data.length === 0) {
return; // ๋ ์ด์ ๋ฐ์ดํฐ ์์
}
for (const item of data) {
yield item;
}
page++;
}
}
async function processData() {
for await (const item of fetchPaginatedData('https://api.example.com/data')) {
console.log(item);
// ์ฌ๊ธฐ์ ๊ฐ ํญ๋ชฉ ์ฒ๋ฆฌ
}
}
processData();
์ด ์์ ๋ ํ์ด์ง๋ค์ด์ ๋ API์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๊ฐ ๋ค์ด๋ก๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๊ฐ ํญ๋ชฉ์ด ๋์ฐฉํ ๋๋ง๋ค ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฒด๊ฐ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค.
2. ๋์ฉ๋ ํ์ผ ์ฒญํฌ ๋จ์๋ก ์ฝ๊ธฐ
๋์ฉ๋ ํ์ผ์ ๋ค๋ฃฐ ๋ ์ ์ฒด ํ์ผ์ ๋ฉ๋ชจ๋ฆฌ์ ์ฝ์ด๋ค์ด๋ ๊ฒ์ ๋นํจ์จ์ ์ผ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ผ์ ๋ ์์ ์ฒญํฌ๋ก ์ฝ๊ณ , ๊ฐ ์ฒญํฌ๊ฐ ์ฝํ ๋๋ง๋ค ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
const fs = require('fs');
const readline = require('readline');
async function* readLargeFile(filePath) {
const fileStream = fs.createReadStream(filePath);
const rl = readline.createInterface({
input: fileStream,
crlfDelay: Infinity, // ๋ชจ๋ CR LF ์ธ์คํด์ค ์ธ์
});
for await (const line of rl) {
yield line;
}
}
async function processFile() {
for await (const line of readLargeFile('path/to/large/file.txt')) {
console.log(line);
// ์ฌ๊ธฐ์ ๊ฐ ์ค ์ฒ๋ฆฌ
}
}
processFile();
์ด ์์ ์์๋ fs
๋ชจ๋์ ์ฌ์ฉํ์ฌ ์ฝ๊ธฐ ์คํธ๋ฆผ์ ์์ฑํ๊ณ readline
๋ชจ๋์ ์ฌ์ฉํ์ฌ ํ์ผ์ ํ ์ค์ฉ ์ฝ์ต๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ ์ค์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ์ํด ๋ฐํ(yield)๋์ด ํ์ผ์ ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฒญํฌ๋ก ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
3. ์ญ์(Backpressure) ๊ตฌํํ๊ธฐ
์ญ์(Backpressure)์ ๋ฐ์ดํฐ๊ฐ ์์ฑ๋๊ณ ์๋น๋๋ ์๋๋ฅผ ์ ์ดํ๋ ๋ฉ์ปค๋์ฆ์ ๋๋ค. ์ด๋ ์์ฐ์๊ฐ ์๋น์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ์๋๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์๋น์๊ฐ ๋ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์ค๋น๊ฐ ๋ ๋๊น์ง ์ ๋๋ ์ดํฐ๋ฅผ ์ผ์ ์ค์งํจ์ผ๋ก์จ ์ญ์์ ๊ตฌํํ ์ ์์ต๋๋ค.
async function* generateData() {
for (let i = 0; i < 100; i++) {
await new Promise(resolve => setTimeout(resolve, 100)); // ์์
์๋ฎฌ๋ ์ด์
yield i;
}
}
async function processData() {
for await (const item of generateData()) {
console.log(`์ฒ๋ฆฌ ์ค: ${item}`);
await new Promise(resolve => setTimeout(resolve, 500)); // ๋๋ฆฐ ์ฒ๋ฆฌ ์๋ฎฌ๋ ์ด์
}
}
processData();
์ด ์์ ์์ generateData
ํจ์๋ 100๋ฐ๋ฆฌ์ด๋ง๋ค ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๋ฐ์ดํฐ ์์ค๋ฅผ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค. processData
ํจ์๋ ๊ฐ ํญ๋ชฉ์ ์ฒ๋ฆฌํ๋ ๋ฐ 500๋ฐ๋ฆฌ์ด๊ฐ ๊ฑธ๋ฆฌ๋ ์๋น์๋ฅผ ์๋ฎฌ๋ ์ด์
ํฉ๋๋ค. processData
ํจ์์ await
ํค์๋๋ ํจ๊ณผ์ ์ผ๋ก ์ญ์์ ๊ตฌํํ์ฌ ์ ๋๋ ์ดํฐ๊ฐ ์๋น์๊ฐ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋ฐ์ดํฐ๋ฅผ ์์ฑํ๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค.
๋ค์ํ ์ฐ์ ๋ถ์ผ์์์ ์ฌ์ฉ ์ฌ๋ก
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ค์ํ ์ฐ์ ๋ถ์ผ์ ๊ฑธ์ณ ํญ๋๊ฒ ์ ์ฉ๋ ์ ์์ต๋๋ค.
- ์ ์์๊ฑฐ๋: ์ ํ ์นดํ๋ก๊ทธ ์คํธ๋ฆฌ๋ฐ, ์ค์๊ฐ ์ฃผ๋ฌธ ์ฒ๋ฆฌ, ์ถ์ฒ ๊ฐ์ธํ. ์๋ฅผ ๋ค์ด, ๋ชจ๋ ์ถ์ฒ์ด ๋ฏธ๋ฆฌ ๊ณ์ฐ๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ์ฌ์ฉ์๊ฐ ํ์ํ๋ ๋์ ์ ํ ์ถ์ฒ์ด ์คํธ๋ฆฌ๋ฐ๋๋ ์๋๋ฆฌ์ค๋ฅผ ์์ํด ๋ณด์ธ์.
- ๊ธ์ต: ๊ธ์ต ๋ฐ์ดํฐ ์คํธ๋ฆผ ๋ถ์, ์์ฅ ๋ํฅ ๋ชจ๋ํฐ๋ง, ๊ฑฐ๋ ์คํ. ์๋ฅผ ๋ค์ด, ์ค์๊ฐ ์ฃผ์ ์์ธ๋ฅผ ์คํธ๋ฆฌ๋ฐํ๊ณ ์ด๋ ํ๊ท ์ ์ฆ์์์ ๊ณ์ฐํฉ๋๋ค.
- ํฌ์ค์ผ์ด: ์๋ฃ ์ผ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ํ์ ๊ฑด๊ฐ ๋ชจ๋ํฐ๋ง, ์๊ฒฉ ์ง๋ฃ ์ ๊ณต. ์จ์ด๋ฌ๋ธ ๊ธฐ๊ธฐ๊ฐ ํ์์ ์์ฒด ์ ํธ๋ฅผ ์์ฌ์ ๋์๋ณด๋๋ก ์ค์๊ฐ ์คํธ๋ฆฌ๋ฐํ๋ ๊ฒ์ ์๊ฐํด ๋ณด์ธ์.
- IoT (์ฌ๋ฌผ ์ธํฐ๋ท): ์ผ์ ๋ฐ์ดํฐ ์์ง ๋ฐ ์ฒ๋ฆฌ, ์ฅ์น ์ ์ด, ์ค๋งํธ ํ๊ฒฝ ๊ตฌ์ถ. ์๋ฅผ ๋ค์ด, ์ค๋งํธ ๋น๋ฉ์ ์๋ ์์ฒ ๊ฐ์ ์ผ์์์ ์จ๋ ์ธก์ ๊ฐ์ ์ง๊ณํฉ๋๋ค.
- ๋ฏธ๋์ด ๋ฐ ์ํฐํ ์ธ๋จผํธ: ๋น๋์ค ๋ฐ ์ค๋์ค ์ฝํ ์ธ ์คํธ๋ฆฌ๋ฐ, ์ธํฐ๋ํฐ๋ธ ๊ฒฝํ ์ ๊ณต, ์ฝํ ์ธ ์ถ์ฒ ๊ฐ์ธํ. ์ฌ์ฉ์์ ๋คํธ์ํฌ ์ฐ๊ฒฐ ์ํ์ ๋ฐ๋ผ ๋น๋์ค ํ์ง์ ๋์ ์ผ๋ก ์กฐ์ ํ๋ ๊ฒ์ด ํ ์์ ๋๋ค.
๋ชจ๋ฒ ์ฌ๋ก ๋ฐ ๊ณ ๋ ค ์ฌํญ
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ธ์.
- ์ค๋ฅ ์ฒ๋ฆฌ: ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ๋ด์ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ ๊ตฌํํ์ฌ ์ค๋ฅ๊ฐ ์๋น์์๊ฒ ์ ํ๋๋ ๊ฒ์ ๋ฐฉ์งํ์ธ์.
try...catch
๋ธ๋ก์ ์ฌ์ฉํ์ฌ ์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ ์ฒ๋ฆฌํ์ธ์. - ๋ฆฌ์์ค ๊ด๋ฆฌ: ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ๋ด์์ ํ์ผ ํธ๋ค์ด๋ ๋คํธ์ํฌ ์ฐ๊ฒฐ๊ณผ ๊ฐ์ ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ฒ ๊ด๋ฆฌํ์ธ์. ๋ ์ด์ ํ์ํ์ง ์์ ๋ฆฌ์์ค๋ ๋ซ๊ฑฐ๋ ํด์ ํ๋๋ก ํ์ธ์.
- ์ญ์(Backpressure): ์๋น์๊ฐ ๋น ๋ฅธ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋๋์ง ์๋๋ก ์ญ์์ ๊ตฌํํ์ธ์.
- ํ ์คํ : ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๊ฐ ์ฌ๋ฐ๋ฅธ ๊ฐ์ ์์ฑํ๊ณ ์ค๋ฅ๋ฅผ ์ ํํ๊ฒ ์ฒ๋ฆฌํ๋์ง ํ์ธํ๊ธฐ ์ํด ์ฒ ์ ํ ํ ์คํธํ์ธ์.
- ์ทจ์: ์๋น์๊ฐ ๋ ์ด์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํ์ง ์์ ๊ฒฝ์ฐ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ์ทจ์ํ ์ ์๋ ๋ฉ์ปค๋์ฆ์ ์ ๊ณตํ์ธ์. ์ด๋ ์ ๋๋ ์ดํฐ๊ฐ ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๋ ์ ํธ๋ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
- ๋น๋๊ธฐ ๋ฐ๋ณต ํ๋กํ ์ฝ: ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๋น๋๊ธฐ ์ดํฐ๋ ์ดํฐ๊ฐ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์ดํดํ๊ธฐ ์ํด ๋น๋๊ธฐ ๋ฐ๋ณต ํ๋กํ ์ฝ์ ์ต์ํด์ง์ธ์.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ vs. ์ ํต์ ์ธ ์ ๊ทผ ๋ฐฉ์
ํ๋ก๋ฏธ์ค๋ Async/Await์ ๊ฐ์ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์๋ ๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง, ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ์์ด ๋ ํนํ ์ด์ ์ ์ ๊ณตํฉ๋๋ค.
- ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ฑ: ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ฐ์ดํฐ๋ฅผ ์ฒญํฌ ๋จ์๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ ์ฒด ๋ฐ์ดํฐ ์ธํธ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋ก๋ํ๋ ๊ฒ์ ๋นํด ๋ฉ๋ชจ๋ฆฌ ์๋น๋ฅผ ์ค์ ๋๋ค.
- ๋ฐ์์ฑ ํฅ์: ๋ฐ์ดํฐ๊ฐ ๋์ฐฉํ๋ ๋๋ก ์ฒ๋ฆฌํ ์ ์๊ฒ ํ์ฌ ๋ ๋ฐ์์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
- ๋จ์ํ๋ ์ฝ๋:
for await...of
๋ฃจํ๋ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์๋นํ๋ ๊น๋ํ๊ณ ์ง๊ด์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ์ฌ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ๋จ์ํํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๊ฐ ํญ์ ์ต์์ ํด๊ฒฐ์ฑ ์ ์๋๋ผ๋ ์ ์ ์ ์ํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ์ ํฌํจํ์ง ์๋ ๊ฐ๋จํ ๋น๋๊ธฐ ์์ ์ ๊ฒฝ์ฐ ํ๋ก๋ฏธ์ค์ Async/Await๊ฐ ๋ ์ ์ ํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ๋๋ฒ๊น ํ๊ธฐ
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋น๋๊ธฐ์ ์ธ ํน์ฑ ๋๋ฌธ์ ๋๋ฒ๊น ํ๊ธฐ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ฅผ ํจ๊ณผ์ ์ผ๋ก ๋๋ฒ๊น ํ๊ธฐ ์ํ ๋ช ๊ฐ์ง ํ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
- ๋๋ฒ๊ฑฐ ์ฌ์ฉ: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ์ ๋ด์ฅ๋ ๊ฒ๊ณผ ๊ฐ์ JavaScript ๋๋ฒ๊ฑฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ฝ๋๋ฅผ ๋จ๊ณ๋ณ๋ก ์คํํ๊ณ ๋ณ์๋ฅผ ๊ฒ์ฌํ์ธ์.
- ๋ก๊น : ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๋ก๊น ๋ฌธ์ ์ถ๊ฐํ์ฌ ์คํ ํ๋ฆ๊ณผ ์์ฑ๋๋ ๊ฐ์ ์ถ์ ํ์ธ์.
- ์ค๋จ์ (Breakpoints): ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ ๋ด์ ์ค๋จ์ ์ ์ค์ ํ์ฌ ์คํ์ ์ผ์ ์ค์งํ๊ณ ์ ๋๋ ์ดํฐ์ ์ํ๋ฅผ ๊ฒ์ฌํ์ธ์.
- Async/Await ๋๋ฒ๊น ๋๊ตฌ: ๋น๋๊ธฐ ์ฝ๋์ฉ์ผ๋ก ์ค๊ณ๋ ์ ๋ฌธ ๋๋ฒ๊น ๋๊ตฌ๋ฅผ ํ์ฉํ๋ฉด ํ๋ก๋ฏธ์ค์ Async/Await ํจ์์ ์คํ ํ๋ฆ์ ์๊ฐํํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๋ฏธ๋
๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ JavaScript์์ ๋น๋๊ธฐ ๋ฐ์ดํฐ ์คํธ๋ฆผ์ ์ฒ๋ฆฌํ๊ธฐ ์ํ ๊ฐ๋ ฅํ๊ณ ๋ค์ฌ๋ค๋ฅํ ๋๊ตฌ์ ๋๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๊ณ์ ๋ฐ์ ํจ์ ๋ฐ๋ผ, ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๊ณ ์ฑ๋ฅ์ ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ์์ด ์ ์ ๋ ์ค์ํ ์ญํ ์ ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. JavaScript ๋ฐ ๊ด๋ จ ๊ธฐ์ ์ ์ง์์ ์ธ ๊ฐ๋ฐ์ ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ์ถ๊ฐ์ ์ธ ํฅ์๊ณผ ์ต์ ํ๋ฅผ ๊ฐ์ ธ์ ๋์ฑ ๊ฐ๋ ฅํ๊ณ ์ฌ์ฉํ๊ธฐ ์ฝ๊ฒ ๋ง๋ค ๊ฒ์ ๋๋ค.
๊ฒฐ๋ก
JavaScript ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ, ๋์ฉ๋ ๋ฐ์ดํฐ ์ธํธ ์ฒ๋ฆฌ, ๋ฐ์ํ ์ ํ๋ฆฌ์ผ์ด์ ๊ตฌ์ถ์ ์ํ ๊ฐ๋ ฅํ๊ณ ์ฐ์ํ ์๋ฃจ์ ์ ์ ๊ณตํฉ๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ๊ฐ๋ , ์ด์ ๋ฐ ์ค์ ์ ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํจ์ผ๋ก์จ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ์ ์ ํฌ๊ฒ ํฅ์์ํค๊ณ ๋ ํจ์จ์ ์ด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค. API์์ ๋ฐ์ดํฐ ์คํธ๋ฆฌ๋ฐ๋ถํฐ ๋์ฉ๋ ํ์ผ ์ฒ๋ฆฌ๊น์ง, ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ๋ ๋ณต์กํ ๋น๋๊ธฐ ๊ณผ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๋ค์ฌ๋ค๋ฅํ ๋๊ตฌ ์ธํธ๋ฅผ ์ ๊ณตํฉ๋๋ค. ๋น๋๊ธฐ ์ ๋๋ ์ดํฐ์ ํ์ ๋ฐ์๋ค์ฌ JavaScript ์ ํ๋ฆฌ์ผ์ด์ ์์ ์๋ก์ด ์์ค์ ํจ์จ์ฑ๊ณผ ๋ฐ์์ฑ์ ๊ฒฝํํด ๋ณด์ธ์.